SCS Software : Sous le capot - Explication de la SSAO
■ Posté le 05/07/2020 par Mel85 dans Autres Projets ■
Bonsoir à tous ! Aujourd'hui, SCS Software nous a encore réservé une news un peu spéciale et relativement longue à traduire.
En effet, les développeurs ont décidé de poursuivre l'idée de la série "Sous le capot" pour nous éclairer sur le fonctionnement de la SSAO qui sera introduite dans la mise à jour 1.38 pour Euro Truck Simulator 2 et American Truck Simulator. Je vous laisse prendre connaissance de l'article officiel et vous souhaite une bonne soirée
----------------------------------------------------------------------------------------------------
ARTICLE OFFICIEL (TRADUCTION)
----------------------------------------------------------------------------------------------------
Aujourd'hui, nous aimerions vous expliquer une nouvelle fonctionnalité graphique que nous implémentons dans nos jeux avec la mise à jour 1.38. L'article est très technique. Nous avons demandé à nos programmeurs de nous aider, et l'explication est assez complexe. Cependant, nous avons pensé qu'il pourrait être intéressant pour au moins une partie de notre public d'être initiée à ce dossier, de voir que ce qu'il se passe sous le capot d'un moteur de jeu implique beacoup de recherche et de travail de la part de notre équipe de programmation. En plus des détails techniques, nous avons pensé que fournir le contexte et expliquer le compromis de performance pourrait être utile et important pour la plupart des joueurs.
Le résumé du pavé ci-dessous est que la SSAO est une technique nouvelle mais très performante pour enrichir le rendu de notre monde de jeu. Vous n'êtes pas obligé de l'utiliser si vous pensez qu'elle diminue trop les performances à votre goût, ou si vous l'appréciez et pouvez vous permettre d'échanger quelques images par secondes contre une meilleure perception des ombres et de la profondeur. L'effet peut-être subtil, il fonctionne surtout au niveau du subconscient, mais une fois que vous y êtes habitué, il peut-être difficile de revenir en arrière. Il s'agit d'une nouvelle étape de notre plan d'amélioration de l'éclairage et des ombres que nous sommes en train de réaliser, et qui sera suivie par un nouveau traitement de la lumière HDR et de l'introduction des cartes de normales des surfaces dans les prochaines mises à jour.
La technique possède ses propres limites et bizarreries. Elle a été utilisée pour plusieurs jeux AAA ces dernières années, et même si elle n'est pas parfaite, elle aide le système de perception des humains à mieux comprendre la scène, et nous espérons que l'ajouter au mélange des technologies de nos simulations de camions est bénéfique. Nous vondrons sans aucun doute introduire d'autres moyens de calcul des ombres qui l'amélioreront, voire le remplaceront.
Nous sommes sous un pression constante d'un sous-ensemble de nos fans pour améliorer l'apparence de nos jeux. Dans le même temps, il y a toujours un désir de faire tourner les jeux plus vite. En plus de ces demandes parfois contradictoires provenant de la base des joueurs, notre propre département artistique est toujours désireux de mettre la main sur de nouveaux jouets graphiques pour rendre notre jeu plus riche et agréable. Chaque fois que nous ajoutons une nouvelle fonctionnalité graphique dans le jeu, nous essayons de le faire de manière à ne pas nuire aux performances des joueurs disposants d'ordinateurs plus anciens, nous ne voulons pas rendre le jeu incompatibles avec nos utilisateurs actuels. C'est pourquoi il existe une option permettant de désactiver complétement la SSAO et plusieurs réglages pour sa qualité / performance.
Le travail de nos programmeurs sur les nouvelles techniques SSAO / HBAO requiert également des modifications de notre art et de notre chaîne de création artistique. Tous les modèles 3D de nos jeux ont dû être revus par le département artistique, et chaque cas où de fausses ombres et des assombrissements avaient déjà été appliqués sur un modèle par un artiste ont été modifiés. Pour certains modèles plus complexes des jeux, il s'agissait d'une simplification qui réduisait en fait le nombre de triangles pour améliorer les performances de rendu. Dans une certaine mesure, nous avons échangé une partie du futur effort manuel qui serait nécessaire pour construire des modèles 3D individuels de bonne qualité contre une passe de rendu algorithmique qui unifie l'aspect des ombres pour toute la scène, aidant à "ancrer" les objets comme les bâtiments, les lampadaires et la végétation sur le terrain.
Ce que représente la SSAO et comment elle fonctionne
Avant de commencer, notez que la SSAO est un acronyme pour "screen space ambient occlusion". Ce nom englobe toutes les différences techniques d'occlusion ambiante (AO) et leurs variantes qui fonctionnent dans l'espace écran (cela signifie qu'elles obtiennent toutes les informations au moment de l'exécution à partir des données qui sont affichées sur l'écran de l'ordinateur et dans les mémoires tampons correspondantes). Existent la SSAO (la technologie Crytech 2007 qui a donné un nom général à toutes les techniques), la MSSAO, le HBAO, le HDAO, le GTAO et bien d'autres techniques utilisant chacune des approches différentes, chacune ayant ses avantages et ses inconvénients. Nous avons basé notre approche sur une technique basée sur l'horizon appelée GTAO qui a été introduite dans un document de 2016 par Activision.
La partie occlusion ambiante (AO) du nom signifie que nous évaluons la quantité de lumière entrante (principalement la lumière du ciel, mais parfois l'occlusion calculé s'applique également à d'autres lumières) qui est occultée à un endroit particulier dans le monde du jeu. Imaginez que vous vous tenez sur un terrain lisse. Vous verriez tout le ciel au dessus, donc il y a 0% d'occlusion, le sol est entièrement éclairé par le ciel. Maintenant, imaginez que vous êtes au fond d'un puits. Vous ne verriez qu'une petite partie du ciel, ce qui signifie que le ciel est occulté à presque 100% et ne contribue que peu à la lumière ambiante dans ce puits, et naturellement il fait assez sombre au fond du puits. Un niveau spécifique d'occlusion ambiante à un endroit particulier affecte les calculs d'éclairage et crée des zones d'ombre dans les plis, les trous et autres endroits "complexes". Il peut varier de 0 à 100% selon l'environnement.
Le calcul de l'occlusion dans les moindres détails et avec une grande précision demande beaucoup de ressources. En gros, il faudrait tirer des rayons depuis n'importe quelle position estimée dans toutes les directions et tester s'ils touchent ou non le ciel, puis faire la moyenne du résultat. Plus vous dessinez des rayons plus vous obtenez de meilleures informations, mais avec un coût de calcul plus élevé. Ce processus pourrait éventuellement être traité hors-ligne, comme lorsque la carte du jeu est sauvegardée par son concepteur. Certains jeux et moteurs utilisent cette approche. Mais de cette façon, vous ne pouvez obtenir des informations d'occlusion ambiante que sur des objets statiques et immobiles, car il n'y a pas de véhicules, ni d'objets animés présents à ce moment-là.
Ainsi, au lieu de générer des informations statiques (ce qui prendrait également beaucoup de temps et d'espace de stockage étant donné l'échelle de notre carte du monde), nous voulons les calculer à la volée, en temps réel. De cette façon, nous pouvons également les calculer pour les interactions avec les véhicules, l'ouverture des ponts, les objets animés, etc. Mais il y a un hic. Pour une telle approche de calcul, nous n'avons que des données visibles à l'écran (pour rappel, "l'espace écran"), donc une fois qu'une partie du monde sort du cadre visible, elle ne peut pas être utilisée pour l'évaluation de l'occlusion. Cette limitation crée divers artefacts tels que la disparition d'une occlusion sur un mur, causée à l'origine par un objet qui vient tout juste de sortir de l'écran et qui est donc devenu invisible non seulement pour vous mais aussi pour l'algorithme, de sorte qu'il a cessé de contribuer au calcul de l'occlusion.
OK, maintenant nous savons ce qu'il faut évaluer (l'occlusion ambiante) et nous savons quelles données nous avons (ce que nous voyons à l'écran). Que faisons-nous ? Eh bien, pour chaque pixel à l'écran (c'est-à-dire 2 millions de pixels en résolution HD, multiplié par 4 (!) pour une échelle à 400% !), notre code de nuanceur doit interroger la valeur du tampon de profondeur des pixels qui l'entourent en essayant d'obtenir une notion de la forme géométrique de la zone qui l'englobe. Nous ne pouvons faire qu'un nombre limité de ces "manipulations" car le coût en terme de performance augmente fortement avec le nombre de manipulations, c'est une opération qui met vraiment à rude épreuve l'accélérateur 3D. La limiation du nombre de manipulations affecte à son tour la précision de l'occlusion ambiante (et dans certaines situations peut créer des imprécisions et des rayures). Imaginez que vous voulez évaluer votre environnement sur une ligne droite de 2 mètres et que vous êtes prêt à passer 8 fois pour l'évaluer. Vous interrogez la ligne tous les 25 centimètres, et chaque petit détail peu passer totalement inaperçu, à moins que vous n'ayez de la chance et que vous ne l'atteignez sur place (ou que vous soyez malchanceux, car vous risquez de le râter à l'image suivante, de sorte que l'environnement semblerait soudainement changer d'une image à l'autre et provoquer des scintillements). Plus votre algorithme est poussé, moins il est précis. Vous devez donc limiter la taille de la zone que vous analysez autour de chaque pixel du jeu, ce qui limite la distance à laquelle l'AO "voit". C'est pourquoi il ne convient pas au calcul de l'occlusion dans les grands espaces comme les arcs sous les ponts.
Nous avons mentionné que la technique choisie est basée sur l'horizon. Cela signifie que nous ne sondons pas l'environnement en tirant des rayons dans le monde 3D, mais que nous analysons un hémisphère au-dessus / autour de chaque pixel pour voir jusqu'où il s'ouvre jusqu'à ce qu'il soit bloqué, quelle quantité de lumière est laissée entrée par la géométrie environnante en utilisant le tampon de profondeur comme indicateur. L'hémisphère est actuellement estimée par plusieurs passages le long d'une ligne tournant autour du pixel concerné. Si nous pouvons suivre cet hémisphère dans sa totalité, il n'y a pas d'occlusion. Si l'algorithme capte une valeur du tampon de profondeur qui bloquerait la lumière entrante, il définit le niveau d'occlusion. L'algorithme est optimisé pour la performance, mais sa limité est qu'une fois qu'il touche quelque chose, même éventuellement un petit objet, il arrête de sonder plus loin. Ceci peut provoquer un problème de "sur-occlusion" et peut-être perçu comme un artefact visuel lorsqu'un objet relativement mince, comme un panneau de signalisation, provoque une forte occlusion sur un mur voisin. Vous pouvez essayer de détecter de tels petits objets et les ignorer, ce qui peut produire une "sous-occlusion" sur des rebords minces. Nous avons opté pour la première solution.
Il existe également une autre propriété intéressante et utile des techniques basées sur l'horizon. En fonction du degré d'occlusion d'un hémisphère au-dessus d'un pixel donné, vous pouvez calculer la direction le moins occultée. La quantité d'occlusion peut-être considérée comme un cône de glace dont l'angle au sommet varie et qui est orienté dans cette direction. Cette direction est appelée "bent normal" et nous l'utilisons pour divers calculs de lumière comme pour occulter la réflexion sur des surfaces brillantes. L'idée est que si vous regardez la surface et que la direction réfléchie sort de ce cône, nous la considérons (au moins partiellement) occultée, ce qui réduit l'intensité de la réflexion. La meilleure façon de voir cet effet est de regarder des pièces chromées plus grandes et arrondies, comme les réservoirs de carburant, avec le SSAO activé et désactivé.
Vous voyez, l'idée n'est pas si compliquée, pour un programmeur graphique expert en tout cas ;), mais il y a beaucoup de calculs à effectuer, ce qui met l'accélérateur 3D à rude épreuve. Nous avons donc créé plusieurs profils de performance, chacun utilisant un mélange de techniques d'optimisation :
Nous espérons que toutes ces informations ont été intéressantes et utiles pour vous. Nous vous envoyons un "high-five" virtuel si vous avez lu cet article jusqu'ici. Vous méritez un cookie et une grande tasse de chocolat chaud ! Si vous voulez obtenir plus de détails sur ce sujet, n'hésitez pas à consulter ce lien par exemple.
Nous vous remercions pour votre temps et pour votre soutien et nous vous reverrons pour de prochains articles de la section "Sous le capot" que nous apportons de temps en temps à notre #BestCommunityEver.
----------------------------------------------------------------------------------------------------
FORUM
----------------------------------------------------------------------------------------------------
Si vous souhaitez réagir à cet article, posez vos questions ou tout simplement discuter entre passionnés, inscrivez-vous dès maintenant sur notre forum. De nombreuses rubriques sont disponibles et n'attendent que vos commentaires